package logic

import (
	"Shopping/dao/mysql"
	"Shopping/models"
	"Shopping/pkg/jwt"
	"Shopping/pkg/snowflake"
)

// SignUp 用户注册函数
// 参数 p 包含用户输入的用户名和密码
// 返回值 error 用于返回注册过程中可能发生的错误
func SignUp(p *models.ParamSignUp) (err error) {
	// 1.判断用户存不存在
	if err := mysql.CheckUserExist(p.UserName); err != nil {
		// 数据库查询出错
		return err
	}
	// 2.生成UID
	userID := snowflake.GenID()
	// 构造一个User实例
	user := &models.User{
		UserID:   userID,
		UserName: p.UserName,
		Password: p.RePassword,
	}
	// 3.密码加密并保存进数据库
	return mysql.InsertUser(user)
	// redis.xxx ...
}

// Login 用户登录函数
// 参数 p 包含用户输入的用户名和密码
// 返回值 error 用于返回登录过程中可能发生的错误
func Login(p *models.ParamLogin) (token string, err error) {
	user := &models.User{
		UserName: p.UserName,
		Password: p.Password,
	}
	// 传递的是指针,就能拿到user.UserID
	if err := mysql.Login(user); err != nil {
		return "", err
	}
	// 生成JWT
	return jwt.GenToken(user.UserID, user.UserName)
}
